<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      padding: 0;
      margin: 0;
    }

    li {
      list-style: none;
    }

    .list {
      padding: 20px 0;
      border: 1px dashed #333;
    }

    .list li {
      line-height: 45px;
      border: 1px solid #333;
      margin-top: 10px;
      background-color: pink;
    }

    .list p,
    .list span {
      display: block;
      line-height: 45px;
      border: 1px solid #333;
      margin-top: 10px;
      background-color: #6ff;
    }
  </style>
</head>

<body>
  <button id="add">新增</button>
  <div class="list">
    <span>我是span标签</span>
    <li id="one">01</li>
    <li class="second">02</li>
    <li>03</li>
    <li>04</li>
    <li>05</li>
    <li class="a last">06</li>
    <p>我是p标签</p>
  </div>
</body>
<script>
  // 事件委托:
  // 利用事件冒泡的原理,把子元素的事件 委托给父元素 由父元素代为执行

  // 事件委托实现步骤:
  // 1. 给父代元素绑定事件,通过事件源 确定触发事件的元素
  // 2. 区分触发事件的元素
  //    (1) 如果元素类型不同  => tagName
  //    (2) 如果元素类型相同, 就通过元素的属性来区分 => id class title 

  // 父元素通过事件源 对元素分门别类 => 统一执行


  // 优点:
  // 节省内存
  // 代码结构更加清晰,提高了代码执行效率
  // 可以给未来生成的元素绑定事件  (页面加载时没有,后来又动态生成的元素)



  var list = document.getElementsByClassName("list")[0];
  var liList = list.getElementsByTagName("li");


  var add = document.getElementById("add");
  add.onclick = function () {
    var li = document.createElement("li");
    li.textContent = "我是新增的li";
    list.appendChild(li);
  }

  list.onclick = function (e) {
    // this =>   绑定事件元素
    // target => 事件源 (触发事件元素)

    var e = e || window.event;
    var target = e.target || e.srcElement;  //事件源 (触发事件元素)
    // console.log(target);

    if (target.tagName == "LI") {
      console.log("点击了li");

      // 1. 遍历集合 对比 => 下标
      // var index = -1;
      // for(var j=0;j<liList.length;j++){
      //     var item = liList[j];
      //     if(item === target){
      //         index = j;
      //         break;
      //     }
      // }
      // console.log(target.textContent,index);

      // 2. 伪数组转真数组
      var arr = Array.from(liList);
      var index = arr.indexOf(target);
      console.log(target.textContent, index);




    } else if (target.tagName == "SPAN") {
      console.log("点击了span");
    } else if (target.tagName == "P") {
      console.log("点击了p");
    }
  }





</script>

</html>